SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
CREATE FUNCTION [dbo].[FN_TCFACT_CAMB_Q05]         
/*----------------------------------------------------------------------*/        
/*---- Empresa   : OFISIS S.A										----*/        
/*---- Cliente   : OFISIS S.A										----*/        
/*---- Sistema   : Tesoreria										----*/        
/*---- Modulo    : Caja - Bancos									----*/        
/*---- Programa	 : Convierte Montos de una Moneda a otra			----*/        
/*---- Script	 : TMCTA_CTE.SQL									----*/        
/*---- Nombre SP : FN_TCFACT_CAMB_Q05								----*/        
/*---- Desarrollado por : Luis Avila Poma							----*/        
/*---- Fecha Creación	: 23/04/2009								----*/         
/*---- Base de Datos	: SQL										----*/        
/*---- Versión			: 2005										----*/        
/*---- Invoca a SP		:											----*/        
/*----------------------------------------------------------------------*/             
/*---- Modificado 1 por     : Daniel Fujimoto Gamero				----*/                  
/*---- Fecha Modificación   : 21/12/2010							----*/                   
/*---- Detalle Modificación : Utilizar factor cambio pactado		----*/                           
/*----------------------------------------------------------------------*/        
/*---- Comentarios         :										----*/        
/*---- Drop Procedure  FN_TCFACT_CAMB_Q05							----*/        
/*---- Grant ALL on FN_TCFACT_CAMB_Q02 to public					----*/        
/*----------------------------------------------------------------------*/        
/*---- SELECT OFITESO.dbo.FN_TCFACT_CAMB_Q05						----*/  
/*---- ('01', 'SOL', 'EUR', '2010/09/04', 1000, 'C','O', 'N', 2.80))----*/        
/*----------------------------------------------------------------------*/  
          
(@ISCO_MONE_ORIG TD_VC_003,		       
@ISCO_MONE_DEST  TD_VC_003,        
@IDFE_CAMB   TD_DT_001,        
@INIM_ORIG   TD_NU_015_006,        
@ISTI_COVE   TD_VC_001,        
@ISTI_OFME   TD_VC_001,       
@ISST_USUA   TD_VC_001,        
@ISCO_MONE_NACI  TD_VC_003,        
@ISCO_MONE_EXTR  TD_VC_003,        
@INFA_USUA   TD_NU_015_006) RETURNS TD_NU_015_006       
AS        
Begin        
Declare        
      
@VNNU_DATA		TD_NU_015_006,        
@VSCO_MON1		TD_VC_003,        
@VSCO_MONE_BAS1 TD_VC_003,        
@VSTI_OPE1		TD_VC_001,        
@VSCO_MON2		TD_VC_003,        
@VSCO_MONE_BAS2 TD_VC_003,        
@VSTI_OPE2		TD_VC_001,        
@VNFA_CAMB_0001 TD_NU_015_006,         
@VNFA_CAMB_0002 TD_NU_015_006
       
 SELECT @VNNU_DATA = 0      
 SELECT @VNFA_CAMB_0001 = 0      
       
 Select @VNNU_DATA = @INIM_ORIG        
          
 --Verificamos si ambas monedas son iguales        
 If @ISCO_MONE_ORIG !=  @ISCO_MONE_DEST        
 Begin        
  
  --Recupero monedas de conversion configuradas       
  Select @VSCO_MON1 = t1.CO_MON1, @VSCO_MONE_BAS1 = t1.CO_MONE_BAS1,        
    @VSTI_OPE1 = t1.TI_OPE1, @VSCO_MON2 = t1.CO_MON2,        
    @VSCO_MONE_BAS2 = t1.CO_MONE_BAS2,@VSTI_OPE2 = TI_OPE2        
  From TMCONV_MONE t1        
  Where t1.CO_MONE_ORIG   = @ISCO_MONE_ORIG        
  And  t1.CO_MONE_DEST   = @ISCO_MONE_DEST         
        
  --Recupero el primer tipo de cambio para efectuar la operación        
  Select @VNFA_CAMB_0001 =         
   Case @ISTI_OFME  When   'M'         
    Then (PatIndex(@ISTI_COVE,'C') * t1.FA_CMPR_MERC  +        
     PatIndex(@ISTI_COVE,'V') * t1.FA_VNTA_MERC )        
    Else        
     (PatIndex(@ISTI_COVE,'C') * t1.FA_CMPR_OFIC  +        
     PatIndex(@ISTI_COVE,'V') * t1.FA_VNTA_OFIC )        
   End         
  From    TCFACT_CAMB t1        
  Where   t1.CO_MONE      = @VSCO_MON1        
  And     t1.CO_MONE_BASE = @VSCO_MONE_BAS1        
  And     t1.FE_CAMB      = @IDFE_CAMB         
     
  --Toma factor de cambio pactado    
  IF (@VSCO_MON1 = @ISCO_MONE_NACI AND @VSCO_MONE_BAS1 = @ISCO_MONE_EXTR) or    
  (@VSCO_MON1 = @ISCO_MONE_EXTR AND @VSCO_MONE_BAS1 = @ISCO_MONE_NACI)    
	SELECT @VNFA_CAMB_0001 = IsNull(@INFA_USUA,@VNFA_CAMB_0001)    
  
  --Calcula monto convertido  
  If IsNull(@VNFA_CAMB_0001,0) > 0       
  Begin        
   If @VSTI_OPE1 = 'M'       
    Select @VNNU_DATA = @VNNU_DATA * @VNFA_CAMB_0001      
   Else        
    Select @VNNU_DATA = @VNNU_DATA / @VNFA_CAMB_0001        
  End         
  Else        
  Begin      
   Select @VNNU_DATA = 0        
  End      
      
  --If existe segunda moneda para convertir        
  If Len(Ltrim(IsNull(@VSCO_MON2,''))) > 0 And  IsNull(@VNNU_DATA,0) != 0      
  Begin        
   Select @VNFA_CAMB_0002 =         
    Case  @ISTI_OFME When   'M'        
     Then (PatIndex(@ISTI_COVE,'C') * t1.FA_CMPR_MERC  +        
      PatIndex(@ISTI_COVE,'V') * t1.FA_VNTA_MERC )        
     Else (PatIndex(@ISTI_COVE,'C') * t1.FA_CMPR_OFIC  +        
      PatIndex(@ISTI_COVE,'V') * t1.FA_VNTA_OFIC )        
     End          
   From TCFACT_CAMB t1        
   Where t1.CO_MONE      =  @VSCO_MON2        
   And  t1.CO_MONE_BASE =  @VSCO_MONE_BAS2        
   And  t1.FE_CAMB      =  @IDFE_CAMB      
      
   --Toma factor de cambio pactado    
   IF (@VSCO_MON2 = @ISCO_MONE_NACI AND @VSCO_MONE_BAS2 = @ISCO_MONE_EXTR) or    
     (@VSCO_MON2 = @ISCO_MONE_EXTR AND @VSCO_MONE_BAS2 = @ISCO_MONE_NACI)    
	SELECT @VNFA_CAMB_0002 = IsNull(@INFA_USUA,@VNFA_CAMB_0002)     
    
   --Calcula monto convertido 
   If IsNull(@VNFA_CAMB_0002,0) > 0        
   Begin        
    If @VSTI_OPE2 = 'M'        
     Select @VNNU_DATA =  @VNNU_DATA * @VNFA_CAMB_0002        
    Else         
     Select @VNNU_DATA =  @VNNU_DATA / @VNFA_CAMB_0002        
   End         
   Else       
   Begin       
    Select @VNNU_DATA = 0        
   End        
           
  End        
 End        
        
 Return IsNull( @VNNU_DATA, 0 )      
        
End        
/*----------------fin Funcion---------------------------*/ 
GO
